package com.qc.pageUtil.page.page;

import java.util.List;

/**
 * 类说明：页码显示效果类 。1：TextModel “第一页 上一页 下一页 最后一页”；2：NumModel “第一页 2 3 4 最后一页”；
 * 
 * @version 创建时间：2017-2-921 下午14:20:22
 */
public class PageModelList<T> {
	/**
	 * 文本类型：形如：“第一页 上一页 下一页 最后一页”
	 */
	public static final int TEXT_MODEL = 1;

	/**
	 * 数字类型：形如：NumModel “第一页 2 3 4 最后一页”
	 */
	public static final int NUM_MODEL = 2;
	/**
	 * 页码显示模型
	 */
	private int model = 1;
	/**
	 * 页码连接URL，不需要添加页码参数【或者是JS的事件和函数】
	 */
	private String url;
	
	
	private String funcName;//JS的方法名
	private String type;//是否是居中显示的 1居中——2不居中
	private String[] funcParams;
	
	/**
	 * 页码信息的封装
	 */
	private Page page = null;
	/**
	 * 模型类型的页码
	 */
	private StringBuffer strHtml = null;

	/**
	 * 数字类型的页码模型中间数字显示个数，例如：第一页 1 2 3 4 5 最后一页，numCount = 5; 默认显示 5个数字
	 */
	private int numCount = 5;
	
	
	//<a href="javascript:void(0)" class="page_prev">&nbsp;</a>
	private static final String FIRSTPAGE="<li><a href='#'>&nbsp;<i class='fa fa-chevron-left'></i></a></li>";
	//<a href="javascript:void(0)"  class="page_next">&nbsp;</a>
    private static final String ENDPAGE="<li><a href='#'><i class='fa fa-chevron-right'></i></a></li>";
	
	

	/**
	 * 页码的模式默认的文字类型的样式
	 * 
	 * @param page
	 *            页面信息
	 * @param url
	 *            页面的url地址
	 */
	public PageModelList(Page page, String url) {
		super();
		this.url = url;
		this.page = page;
	}

	/**
	 * 页码的模型
	 * 
	 * @param page
	 *            页面信息
	 * @param url
	 *            页面的url地址
	 * @param model
	 *            页码的显示样式
	 */
	public PageModelList(Page<T> page, String url, int model,String funcName,String[] funcParams) {
		super();
		this.model = model;
		this.url = url;
		this.page = page;
		this.funcName=funcName;
		this.funcParams=funcParams;
	}
	
	//此
	//PageModelProductList<ADemandidInfo> pageModel = new PageModelProductList<ADemandidInfo>(page, "#", PageModel.NUM_MODEL,"doPage","2");//设置页码显示类型  
	public PageModelList(Page page, String url, int model,String funcName,String type) {
		super();
		this.model = model;
		this.url = url;
		this.page = page;
		this.funcName=funcName;
		this.type=type;
		this.funcParams=new String[]{""};
	}

	/**
	 * 页码的模型
	 * 
	 * @param page
	 *            页面信息
	 * @param url
	 *            页面的url地址
	 * @param model
	 *            页码的显示样式
	 * @param numCount
	 *            数字类型的页码，共显示的个数
	 */
	public PageModelList(Page<T> page, String url, int model, int numCount,String eventsFunc) {
		super();
		this.model = model;
		this.url = url;
		this.page = page;
		this.numCount = numCount;
		this.funcName=eventsFunc;
	}

	/**
	 * 返回页面的模型
	 * 
	 * @return
	 */
	public String getPageModel() {
		// 组装页码模型
		createURL();
		return createModel();
	}

	/**
	 * 构建URL
	 */
	private void createURL() {
		//url = url.contains("?") ? url + "&page=" : url + "?page=";
	}

	/**
	 * 组装页码模型
	 */
	private String createModel() {
		strHtml = new StringBuffer();
		switch (model) {
		case TEXT_MODEL:// 文本模型
			//buildTextModel();
			break;
		case NUM_MODEL:// 数字模型
			buildNumModel();
			break;
		default:// 文本模型
			break;
		}
		return strHtml.toString();
	}

	/**
	 * 组件数字类型的页码模型
	 */
	private void buildNumModel() {

			if(this.url==null||this.url.equals("")||this.url.equals("#")){
				this.url="javascript:";
			}
			int currentPage = page.getCurrentPage(); //
			int countPage = page.getCountPage();
			if(type=="1"){
				numCount=4;
			}
			PageIndex pageIndex = PageIndex.getPageIndex(numCount, currentPage, countPage);// 构造格式：第一页 1 2 3 4 5 最后一页
			
			if (currentPage > 1) {// 不是第一页时，显示首页
	            strHtml.append("<li><a href=").append(url);
	            if(this.funcName!=null&&!this.funcName.equals("")){
	                strHtml.append("onclick=").append(this.funcName);
	                strHtml.append("(");
	                strHtml.append("'").append(currentPage-1).append("'");
	                for (int t=0;t<this.funcParams.length;t++) {
	                    strHtml.append(",'").append(this.funcParams[t]).append("'");
	                }
	                strHtml.append(")");
	            }
	            strHtml.append(">&nbsp;<i class='fa fa-chevron-left'></i></a></li>");
	        }
			
			//<a href="javascript:void(0)" class="page_prev">&nbsp;</a>
			
			if (currentPage <= countPage) {
				for (int i = pageIndex.getStartIndex(); i <= pageIndex .getEndIndex(); i++) {
					// 当前页增加样式
					if (currentPage == i) {
						//strHtml.append("<span  class=\"num\">").append(i).append("</span>");
						//<span  class="num">2</span>
					    strHtml.append("<li class='active'><a href=\"javascript:\">").append(i).append("</a></li>");
					} else {
						//<a href="javascript:void(0)"  class="num">3</a>
						strHtml.append("<li><a href='").append(url).append("'");
						if(this.funcName!=null&&!"".equals(this.funcName)){
							strHtml.append("onclick=").append("\"").append(this.funcName);
							strHtml.append("(");
							strHtml.append("'").append(i).append("'");
							for (int t=0;t<this.funcParams.length;t++) {
								strHtml.append(",'").append(this.funcParams[t]).append("'");
							}
							strHtml.append(")");
						}
						strHtml.append("\"").append(">").append(i).append("</a></li>");
					}
				}
				
				// 不是最后一页显示末页
				if (currentPage < countPage) {
					strHtml.append("<li><a href='").append(url).append("'");;
					if(this.funcName!=null&&!this.funcName.equals("")){
						strHtml.append("onclick=").append("\"").append(this.funcName);
						strHtml.append("(");
						strHtml.append("'").append(currentPage+1).append("'");
						for (int t=0;t<this.funcParams.length;t++) {
								strHtml.append(",'").append(this.funcParams[t]).append("'");
						}
						strHtml.append(")");
					}
					strHtml.append("\"").append(">&nbsp;<i class='fa fa-chevron-right'></i></a></li>");
				
				}
			}
	}

	
	public List<T> getList() {
		return page.getList();
	}
}
